home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c / pro14 / search.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-04-02  |  1.0 KB  |  40 lines

  1. #include "bm.h"
  2. #include "Extern.h"
  3. int Search(Pattern,PatLen,Buffer, EndBuff, Skip1, Skip2, Desc)
  4. char Pattern[];
  5. int PatLen;
  6. char Buffer[];
  7. char *EndBuff;
  8. int Skip1[], Skip2[];
  9. struct PattDesc *Desc;
  10. {
  11.     register char *k, /* indexes text */
  12.         *j, /* indexes Pattern */
  13.         *PatBegin; /* register pointing to char
  14.         * before beginning of Pattern */
  15.     register int Skip; /* skip distance */
  16.     char *PatEnd,
  17.     *BuffEnd; /* pointers to last char in Pattern and Buffer */
  18.     BuffEnd = EndBuff;
  19.     PatBegin = Pattern - 1;
  20.     PatEnd = Pattern + PatLen - 1;
  21.  
  22.     k = Desc->Start;
  23.     Skip = PatLen-1;
  24.     while ( Skip <= (BuffEnd - k) ) {
  25.         j = PatEnd;
  26.         k = k + Skip;
  27.         while (j > PatBegin && *j == *k) {
  28.             --j; --k;
  29.         } /* while */
  30.         if (j< Pattern) {
  31.             /* found it. Start next search just after the pattern */
  32.             Desc -> Start = k + 1 + Desc->PatLen;
  33.             return(1);
  34.         } /* if */
  35.         Skip = max(Skip1[*(char *)k],Skip2[j-Pattern]);
  36.     } /* while */
  37.     Desc->Start = k;
  38.     return(0);
  39. } /* Search */
  40.